package com.example.shishaolong.warehousemanager;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.example.shishaolong.warehousemanager.common.SystemConst;
import com.example.shishaolong.warehousemanager.dao.GoodsDao;
import com.example.shishaolong.warehousemanager.entity.GoodsEntity;
import com.example.shishaolong.warehousemanager.view.TitleLayout;

import java.util.List;

public class GoodsActivity extends AppCompatActivity{

    private GoodsDao goodsDao;
    private GoodsAdapter adapter;
    private List<GoodsEntity> goodsEntityList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods);

        //隐藏标题栏
        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null){
            actionBar.hide();
        }
        //设置标题栏
        TitleLayout titleLayout = (TitleLayout) findViewById(R.id.title_layout);
        titleLayout.setTitle("货物列表");
        titleLayout.setRightButton(new TitleLayout.ButotonEntity("入库", new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                Toast.makeText(GoodsActivity.this.getApplicationContext(),"编辑",Toast.LENGTH_SHORT).show();
                //启动货物列表页面
                Intent intent = new Intent();
                //传入入库参数  --新增
                intent.putExtra(SystemConst.GOODS_GOTO_FROM,SystemConst.GOODS_GOTO_FROM_STORAGE);
                intent.setClass(GoodsActivity.this,GoodsAddActivity.class);
//                startActivity(intent);
                startActivityForResult(intent,SystemConst.GOODS_ADD_ACTIVITY_START_FOR_RESULT);  //加页面跳转标识符
            }
        }));

        //初始化货物的数据访问层实例
        goodsDao = new GoodsDao(getApplicationContext());
        //获取到货物列表
        goodsEntityList = goodsDao.findAll();

        //构造Adapter
        adapter = new GoodsAdapter(GoodsActivity.this, goodsEntityList);
        final ListView goodsListView = (ListView) findViewById(R.id.gooods_listView);
        goodsListView.setAdapter(adapter);
        goodsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //勾选事件，点击选择记录
                boolean checked = goodsEntityList.get(position).isChecked();
                if (!checked) {
                    goodsEntityList.get(position).setChecked(true);
                }else {
                    goodsEntityList.get(position).setChecked(false);
                }
                adapter.notifyDataSetChanged();
            }
        });

        //长按监听事件-进入修改界面
        goodsListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                Intent intent = new Intent();
                //传入入库参数  --修改
                intent.putExtra(SystemConst.GOODS_GOTO_FROM,SystemConst.GOODS_GOTO_FROM_UPDATE);
                intent.putExtra(SystemConst.GOODS_ENTITY_ID,goodsEntityList.get(position).getId()); //将id传入
                intent.setClass(GoodsActivity.this,GoodsAddActivity.class);
                //跳转到修改页面，并设置了页面标识符（用于所跳转页面返回到当前页面，能判断出是哪个页面）
                startActivityForResult(intent,SystemConst.GOODS_ADD_ACTIVITY_START_FOR_RESULT);   //启动修改页面

                return false;// return false，click还会被调用，true click不会再调用
            }
        });

        //全选按钮按钮设置
        Button all_sel = (Button) findViewById(R.id.all_sel);
        Button all_unsel = (Button) findViewById(R.id.all_unsel);
        //批量出库按钮
        Button out_warehouse = (Button)findViewById(R.id.out_warehouse);
        all_sel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                for (int i = 0; i < goodsEntityList.size(); i++) {
                    goodsEntityList.get(i).setChecked(true);
                }

                adapter.notifyDataSetChanged();
            }
        });

        //全部取消的设置
        all_unsel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                for (int i = 0; i < goodsEntityList.size(); i++) {
                    goodsEntityList.get(i).setChecked(false);
                }
                adapter.notifyDataSetChanged();
            }
        });

        //出库的监听事件
        out_warehouse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //获取到所有选中项
                int count = 0;
                for (int i=0; i< goodsEntityList.size();i++) {
                    GoodsEntity goodsEntity = goodsEntityList.get(i);
                    if(goodsEntity.isChecked()){
                        goodsDao.delete(goodsEntity.getId());
                        //移除界面里列表中的已删除项
                        goodsEntityList.remove(i);
                        count++;
                    }
                }
                //提示出库成功
                if(count>0){
                    Toast.makeText(GoodsActivity.this.getApplicationContext(),"本次"+count+"个货物，出库成功！",Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(GoodsActivity.this.getApplicationContext(),"请先选择出库货物。",Toast.LENGTH_SHORT).show();
                }
                //刷新界面
               adapter.notifyDataSetChanged();
            }
        });

    }

    /**
     * 再次返回到这个界面时重新加载数据
     */
//    @Override
//    protected void onResume() {
//        super.onResume();
//
//        goodsEntityList = goodsDao.findAll();
//        goodsEntityList.set(4,new GoodsEntity());
//
//        //大坑，，，重新加载数据
//
//        adapter.notifyDataSetChanged();
//    }

    /**
     * 从其他页面返回到此页面时调用，   用于刷新此页面的一些数据    数据刷新
     * @param requestCode
     * @param resultCode 返回码，对应上了，从此页面启动其他页面时设置的，回调时用于判断是从哪个页面返回的
     * @param data intent，其它页面可以设置一些数据，返回到这个页面时再取出来。
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        switch (requestCode){ //判断是从哪个页面返回的
            case SystemConst.GOODS_ADD_ACTIVITY_START_FOR_RESULT:

                /*
                * 添加修改成功，页面数据刷新不生效
                * GoodsEntityList定义在方法内部时，方法中的其它监听器要执行（匿名内部类）刷新页面数据等操作，所以数据集合必须定义为final
                * 现在为了在其他页面中也使用数据集合，将它设置成了成员变量，去调了final修饰符（因为要在方法中初始化，不能用final修饰）
                * 虽然现在没有final修饰，但是它本质上还是final的，只是隐式的，这样，数据集合就只能修改它存的数据而不能修改它的指向
                * 为了验证，在数据添加、修改成功后返回到此页面的回调函数中 将数据集合的指向设置为了null 。但是并没有报错，界面上数据也没有任何变化，
                * 所以数据集合本质上还是final的。  只能更改它里面存的数据项，不能修改它的指向。
                */
//                goodsEntityList = null;  //不生效，页面数据照样有，并没有指向null ，注释解除，程序执行，界面数据照样有，不起作用

                goodsEntityList.clear();
                goodsEntityList.addAll(goodsDao.findAll());
                adapter.notifyDataSetChanged();
                break;
        }

        super.onActivityResult(requestCode, resultCode, data);
    }
}
